package com.gopay.common.util.sigh;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

/**
 * bis和cashier签名互信 参数全角半角处理
 * @author sh.jiao
 * @date 2017-08-16 16:44:10
 */
public class CallCashierSignUtil {

    // 恶意字符转码表
    private static final Map<Character, String> evilCharsMap = new HashMap<Character, String>();
    // 恶意字符数组
    private static Character[] ecArr = null;

    static {
        // 恶意字符转码表初始化
        //*********************************************
        // 【注意】因为base64编码后里有+，/，=号这三个字符，所以不能过滤
        //*********************************************
        evilCharsMap.put('<', "&lt;");// 小于号
        evilCharsMap.put('>', "&gt;");// 大于号
        evilCharsMap.put('\'', "&apos;");// 单引号
        evilCharsMap.put('"', "&quot;");// 双引号
        evilCharsMap.put('$', "&#36;");// 美元标识
        evilCharsMap.put('%', "&#37;");// 百分号
        evilCharsMap.put('\\', "&#92;");// 反斜杠
        evilCharsMap.put('(', "（");// 左小括号
        evilCharsMap.put(')', "）");// 右小括号

        // 恶意字符数组初始化
        ecArr = new Character[evilCharsMap.keySet().size()];

        Iterator<Character> ecIter = evilCharsMap.keySet().iterator();
        int i = 0;
        while (ecIter.hasNext()) {
            ecArr[i++] = ecIter.next();
        }
    }

    public static String replaceChar(String eleValue) {
        for (int j = 0; j < ecArr.length; j++) {
            Character ec = ecArr[j];
            if (eleValue != null && eleValue.contains(ec.toString())) {
                eleValue = eleValue.replace(ec.toString(), evilCharsMap.get(ec));
            }
        }
        return eleValue;
    }

    /*public static void main(String[] args) {
        String test = "系统互信失败(（）可能是不知道的缘由)()";
        System.out.println("变形前："+test);
        System.out.println("变形后："+replaceChar(test));
    }*/
}
